<?php

class Crud_Controller_Login extends Crud_Controller_Layer   
{
	/**
	 * НЕ вызываем parent::preDispatch() чтобы избежать проверки прав доступа и авторизации.
	 * 
	 * @return void
	 */
	public function preDispatch()
	{
		$this->view->addScriptPath(realpath(dirname(__FILE__) . '/../views'));
		Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session('crud_auth'));
	}
	
	public function indexAction() 
	{
		$this->_disableLayout();
		
		if ($this->getRequest()->isPost()) {
			$login = $this->_getParam('login');
			$password = $this->_getParam('password');
			
		    $adapter = new Crud_Auth_Adapter_Basic();
		    $adapter->setIdentity($login);
		    $adapter->setCredential($password);
		    
		    $result = Zend_Auth::getInstance()->authenticate($adapter);
		    if ($result->isValid()) {
		    	$session = new Zend_Session_Namespace('login');
		    	$previousPage = $session->previousPage;
		    	
		    	if ($previousPage) {
		    		$session->previousPage = null;
		    		$this->_redirect($previousPage);
		    		$this->view->errors = array("Автоматическое перенаправление не сработало, перейдите по  <a href='$previousPage'>ссылке</a>");
		    		
		    	} else {
		    		$this->_goto(array('module' => 'admin', 'controller' => 'crud', 'action' => 'index'));
		    		$this->view->errors = array('Автоматическое перенаправление не сработало, перейдите по  <a href="/admin/crud">ссылке</a>.');
		    	}
		    	
		    	return;
		    }
		    
		    $messages = $result->getMessages();
		    foreach ($messages as $key => $value) {
		    	if ($value == 'A record with the supplied identity could not be found.') {
		    		$messages[$key] = "Неверный логин или пароль.";
		    	} else if ($value == 'Supplied credential is invalid.') {
		    		$messages[$key] = "Неверный логин или пароль.";
		    	}
		    }
		    $this->view->errors = $messages;
		}
	}
	
	public function outAction()
	{
		Zend_Auth::getInstance()->clearIdentity();
		session_regenerate_id(1);
		$this->_goto(array('action' => 'index'));
	}
}
